package com.starry.module.system.core.file.mapper;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.db.core.mapper.BaseMapperX;
import com.starry.db.core.query.LambdaQueryWrapperX;
import com.starry.db.core.query.MPJLambdaWrapperX;
import com.starry.module.system.api.file.domain.qo.SysFilePageQo;
import com.starry.module.system.api.file.domain.vo.SysFileVo;
import com.starry.module.system.core.file.entity.FileConfig;
import com.starry.module.system.core.file.entity.SysFile;
import org.apache.ibatis.annotations.Mapper;

/**
 * 文件信息-数据库服务层
 *
 * @author xiaoke
 */
@Mapper
public interface SysFileMapper extends BaseMapperX<SysFile> {

    /**
     * 分页查询
     *
     * @param pageQo 分页参数
     * @return PageVo<SysFileVo>
     */
    default PageVo<SysFileVo> selectPage(SysFilePageQo pageQo) {
        return selectJoinPage(pageQo, SysFileVo.class, new MPJLambdaWrapperX<SysFile>()
                .selectAll(SysFile.class)
                .select(FileConfig::getId)
                .selectAs(FileConfig::getName, SysFileVo::getConfigName)
                .leftJoin(FileConfig.class, FileConfig::getId, SysFile::getConfigId)
                .orderByDesc(SysFile::getCreateTime)
        );
    }

    /**
     * 根据文件名称查询
     *
     * @param fileName 文件名称
     * @param configId 文件配置id
     * @return SysFile
     */
    default SysFile selectByFile(Long configId, String fileName) {
        return selectOne(new LambdaQueryWrapperX<SysFile>()
                .eq(SysFile::getFileName, fileName)
                .eq(SysFile::getConfigId, configId)
        );
    }
}

